#!/bin/bash
set -e

echo "配置 devpi 客户端..."
devpi use http://localhost:3141

# 创建用于私有仓库的用户
echo "创建用户和索引..."
devpi user -c mirroruser password=securepassword123 || echo "用户已存在"

# 关键修复：必须登录新创建的用户
echo "登录新创建的用户..."
devpi login mirroruser --password=securepassword123

# 现在可以创建索引了
devpi index -c main bases=root/pypi || echo "索引已存在"

# 切换到自定义索引
devpi use mirroruser/main

# 创建临时目录用于下载
mkdir -p /tmp/packages

# 配置 pip 使用阿里云镜像
export PIP_INDEX_URL="https://mirrors.aliyun.com/pypi/simple/"
export PIP_TRUSTED_HOST="mirrors.aliyun.com"

echo "开始处理 requirements.txt 中的包..."

# 检查 requirements.txt 是否存在
if [ ! -f "/app/requirements.txt" ]; then
    echo "错误: /app/requirements.txt 文件不存在!"
    echo "请确保您的项目目录中包含 requirements.txt 文件"
    exit 1
fi

# 第1阶段：解析 requirements.txt 获取所有包及其依赖
all_packages=()
while IFS= read -r package; do
  # 跳过空行和注释
  [[ -z "$package" || "$package" =~ ^# ]] && continue
  
  echo "分析包: $package"
  
  # 获取包的依赖
  pip install --no-deps --dry-run "$package" > /dev/null 2>&1
  dependencies=$(pip install --no-deps --dry-run "$package" 2>&1 | grep 'Collecting' | awk '{print $2}' | sed 's/[<=>].*//')
  
  # 添加主包
  all_packages+=("$package")
  
  # 添加所有依赖
  while IFS= read -r dep; do
    [[ -z "$dep" ]] && continue
    all_packages+=("$dep")
  done <<< "$dependencies"
done < /app/requirements.txt

# 去重并排序
unique_packages=($(printf "%s\n" "${all_packages[@]}" | sort -u))

# 第2阶段：下载64位平台的二进制包
echo "下载64位平台的二进制包..."
for package in "${unique_packages[@]}"; do
  echo "处理 $package..."
  
  # 清空临时目录
  rm -f /tmp/packages/*
  
  # 下载 Windows 64-bit 包
  echo "  下载 $package 的 win_amd64 版本..."
  pip download --only-binary=:all: --python-version 313 --platform win_amd64 \
    -i https://mirrors.aliyun.com/pypi/simple/ -d /tmp/packages "$package" > /dev/null 2>&1
  
  # 下载 Linux x86_64 包
  echo "  下载 $package 的 manylinux_2_17_x86_64 版本..."
  pip download --only-binary=:all: --python-version 313 --platform manylinux_2_17_x86_64 \
    -i https://mirrors.aliyun.com/pypi/simple/ -d /tmp/packages "$package" > /dev/null 2>&1
  
  # 上传所有下载的包到 devpi
  for whl in /tmp/packages/*.whl; do
    if [ -f "$whl" ]; then
      echo "  上传 $whl 到私有仓库..."
      devpi upload "$whl"
    fi
  done
done

# 第3阶段：创建平台过滤索引
echo "创建平台过滤索引..."
devpi index -c win_amd64 bases=main \
    mirrorsync=1 \
    platform=win_amd64 \
    python_version=3.13 || echo "索引 win_amd64 可能已存在"
    
devpi index -c linux_x86_64 bases=main \
    mirrorsync=1 \
    platform=manylinux_2_17_x86_64 \
    python_version=3.13 || echo "索引 linux_x86_64 可能已存在"

echo "设置完成! Devpi 服务器已就绪，包含指定的64位平台包。"
echo ""
echo "使用以下命令从私有仓库安装包:"
echo "  Windows 用户: pip install -i http://<YOUR_LOCAL_IP>:3141/mirroruser/win_amd64/+simple/ <package>"
echo "  Linux 用户: pip install -i http://<YOUR_LOCAL_IP>:3141/mirroruser/linux_x86_64/+simple/ <package>"
echo ""
echo "注意: 将 <YOUR_LOCAL_IP> 替换为您的本地IP地址"